EύXt@C^Cgo[ɃAX^XNtȂǕ悤ɁBiρj
@ ύXҏWāAAh[ꍇAAX^XN͏ȂB
E}EXL[{[hҏW͎ɕs\ȑLZꍇ̃G[OEBhEɏóB
E}EX͂ɂIuWFNg̈ړŁAEBhEɕ\ĂȂy[WɃIuWFNgړ
邱ƂłȂB
Ej[ɃL[{[hANZ[^̑ΉL[\iJX^}CYŊ蓖ĂύXł
ŁAIɕύXKvjB
Eǂx쐬ׂ̈̃|[g@\B
@[Ŋl\ȃRC̍ő喇B
@n`IuWFNgĂ܂\B
Ekeys.cg_VKeyInfo̕string_?.hɒ萔ƂĒ`B

NOTE : 
--------------------------------------------------------------------------------------
emuengine.cExecuteCPU()֐ŁAJbgXLC̖{1`77{ȂB
--------------------------------------------------------------------------------------
ERefreshLine()֐̈0NZB
EeXgvCp̃Z[uf[^Ȃ΂ȂȂ
EIuWFNgr[`pExecuteCPUNoRefreshScreen()

// 㑤̃XLC8{ɂo[W
// NTSC
// 0   - 7     the top eight lines are cut off
// 8   - 231   visible
// 232 - 239   the bottom eight lines are cut off
// 240 - 242   an additional 3 scanlines worth of CPU cycles to enter V-Blank.
// 243         V-Blank flag, NMI
// 243 - 262   V-Blank period takes a further 20 scanlines worth before the next frame can be drawn.
static WORD ExecuteCPU()
{
	// Execute CPU
	m6502zpexec(113);

	// Set hity flag, if necessary
	if(wScanline == pbSPRRAM[0] + GetFirstNonTransparentLine(pbSPRRAM[1]))
		bPPUStaReg|=0x40;
	//
	if(wScanline > 7 && wScanline < 232) { // 8 - 231
		// Update scanline
		RefreshLine(wScanline);
		return ++wScanline;
	}
	else if(wScanline == NES_SCANLINE_VBLANK) {
		PostMessage(GETFRAMEWNDHANDLE(ghEmuWnd), WM_UPDATEFRAME, 0, 0); //g_fUpdate = TRUE;
		// VBlank begins
		g_bInVBlank = TRUE;
		// Set vblank flag
		bPPUStaReg |= 0x80;
		// if nessesary, execute NMI.
		if(bPPUCtrlReg1 & 0x80) m6502zpnmi();
		return ++wScanline;
	}
	else if(wScanline >= NES_SCANLINE_BOTTOM) {
		// VBlank ends
		g_bInVBlank = FALSE;
		// Clear VBlank flag and hity flag
		bPPUStaReg &= 0x30;
		// Reset scanline
		wScanline = 0;
		return 0; // wScanline == 0 and DO NOT INCREMENT
	}

	return ++wScanline;
}

 NESG~[^ƓɋNāASMB̎c莞Ԃ̌o߂rƒxB

}`fBA^C}[̎Ԃ̕␳sCł邩ȂB
Xbh쐬āA[vł΂悩BłȂB

------------------------------------------
Sʂ̐ݒ̓AhDłȂ悤ɂĂ
------------------------------------------